File: /var/www/kevin-demo/wp-content/plugins/wpforms-sendinblue/src/Api/Http/Request.php
<?php
namespace WPFormsSendinblue\Api\Http;
/**
* Wrapper class for making HTTP requests.
*
* @since 1.0.0
*/
class Request {
/**
* User-agent value.
*
* @since 1.0.0
*
* @var string
*/
const USER_AGENT = 'wpforms-sendinblue/';
/**
* Base URL.
*
* @since 1.0.0
*
* @var string
*/
private $base_url = '';
/**
* Parameters.
*
* @since 1.0.0
*
* @var array
*/
private $parameters;
/**
* Request constructor.
*
* @since 1.0.0
*
* @param string $base_url Base URL.
* @param array $params Parameters.
*/
public function __construct( $base_url, $params = [] ) {
$this->base_url = $base_url;
$this->parameters = array_merge_recursive( $this->get_default_parameters(), $params );
}
/**
* Send a GET request.
*
* @since 1.0.0
*
* @param string $uri URI to request.
* @param array $args Arguments for the request.
*
* @return Response
*/
public function get( $uri, $args = [] ): Response {
$uri = add_query_arg( $args, $uri );
return $this->request( 'GET', $uri, [] );
}
/**
* Send a POST request.
*
* @since 1.0.0
*
* @param string $uri URI to request.
* @param array $args Arguments for the request.
*
* @return Response
*/
public function post( $uri, $args = [] ): Response {
$args = ! empty( $args ) ? [ 'body' => $args ] : [];
return $this->request( 'POST', $uri, $args );
}
/**
* Send a PUT request.
*
* @since 1.0.0
*
* @param string $uri URI to request.
* @param array $args Arguments for the request.
*
* @return Response
*/
public function put( $uri, $args = [] ): Response {
$args = ! empty( $args ) ? [ 'body' => $args ] : [];
return $this->request( 'PUT', $uri, $args );
}
/**
* Send a DELETE request.
*
* @since 1.0.0
*
* @param string $uri URI to request.
* @param array $args Arguments for the request.
*
* @return Response
*/
public function delete( $uri, $args = [] ): Response {
return $this->request( 'DELETE', $uri, $args );
}
/**
* Send a request based on method (main interface).
*
* @since 1.0.0
*
* @param string $method Request method.
* @param string $uri URI to request.
* @param array $args Options for the request.
*
* @return Response
*/
public function request( $method, $uri, $args ): Response {
// Prepare URL.
$url = $this->base_url . $uri;
// Merge options.
$options = array_merge_recursive( $this->parameters, $args );
// Set a request method.
$options['method'] = $method;
// Prepare a request body, as API expect it in a JSON format.
if (
! empty( $options['headers']['Content-Type'] ) &&
$options['headers']['Content-Type'] !== 'application/x-www-form-urlencoded' &&
! empty( $options['body'] )
) {
$options['body'] = wp_json_encode( $options['body'] );
}
/**
* Filter a request options array before it's sent.
*
* @since 1.0.0
*
* @param array $options Request options.
* @param string $method Request method.
* @param string $uri Request URI.
* @param Request $instance Instance of Request class.
*/
$options = apply_filters( 'wpformssendinblue_api_v3_https_request_request_options', $options, $method, $uri, $this ); // phpcs:ignore WPForms.PHP.ValidateHooks.InvalidHookName
// Retrieve the raw response from a safe HTTP request.
$response = wp_safe_remote_request( $url, $options );
return new Response( $response );
}
/**
* Retrieve default parameters for request.
*
* @since 1.0.0
*
* @return array
*/
public function get_default_parameters() {
/**
* Request parameters.
*
* @since 1.0.0
*
* @param array $defaults Request arguments.
* @param Request $instance Instance of Request class.
*/
return apply_filters(
'wpformssendinblue_api_v3_http_request_get_default_parameters',
[
'method' => 'GET',
'timeout' => 5,
'headers' => [
'User-Agent' => self::USER_AGENT . WPFORMS_SENDINBLUE_VERSION,
'Connection' => 'keep-alive',
],
],
$this
);
}
}